// f_statistiques.h	1.0	<05/2012>	<NORMAND Julien>
#ifndef F_PREFERENCES_H
#define F_PREFERENCES_H

// En-têtes standards necessaires dans ce fichier en-tête seulement ------------
#include <QWidget>
#include <QtGui>

// En-têtes propres à l'application necessaires dans ce fichier en-tête --------
#include "f_ajoutertitretype.h"
#include "f_ajouterclassification.h"

namespace Ui {
class F_Preferences;
}

/**
 *  @brief F_Preferences permet de modifier les options du programme.
 *
 *  Les options disponibles dans cette classe sont:
 *      - Préférences Générales avec :
 *          - Nombre de jeux autorisés par défaut.
 *          - Prix d'une unité de location.
 *          - Nombre de jours de retard toléré.
 *          - Nombre de jours avant l'envoi d'un mail.
 *          - Modification du code administrateur.
 *      - Réseaux avec :
 *          - Information de la BDD.
 *          - Messagerie.
 *      - Membres avec :
 *          - Titre.
 *          - Type.
 *      - Jeux avec :
 *          - Type.
 *          - Chemin des règles des jeux.
 *          - Chemin des images des jeux.
 *      - Informations de la ludothèque.
 */
class F_Preferences : public QWidget
{
    Q_OBJECT
    
public:
    // METHODEs ----------------------------------------------------------------
    // CONSTRUCTEURs et DESTRUCTEURs
    /**
     *  @brief Constructeur de la classe.
     *
     *  @param parent
     */
    explicit F_Preferences(QWidget *parent = 0);

    /**
     *  @brief Destructeur de la classe.
     *
     */
    ~F_Preferences();

public slots:
    // METHODEs ----------------------------------------------------------------
    /**
     *  @brief Slot qui récupère un signal pour la classe F_Preferences.
     *
     */
    void on_Valider();

private slots:
    // METHODEs ----------------------------------------------------------------
    /**
     *  @brief Permet d'enregistrer les actions effectuées depuis l'ouverture de la F_Preferences.
     *
     */
    void on_Bt_Enregistrer_clicked();

    /**
     *  @brief Permet d'annuler tous les actions effectuées depuis l'ouverture de la F_Preferences.
     *
     */
    void on_Bt_Annuler_clicked();

    /**
     *  @brief Sélectionne la ligne entière du tableau titre de membre.
     *
     *  @param index
     */
    void on_TbV_MembresTitre_clicked(const QModelIndex &index);

    /**
     *  @brief Sélectionne la ligne entière du tableau type de membre.
     *
     *  @param index
     */
    void on_TbV_MembresType_clicked(const QModelIndex &index);

    /**
     *  @brief Sélectionne la ligne entière du tableau type de jeu.
     *
     *  @param index
     */
    void on_TbV_JeuxType_clicked(const QModelIndex &index);

    /**
     *  @brief Permet d'ajouter un titre d'un membre.
     *
     */
    void on_Bt_AjouterMembreTitre_clicked();

    /**
     *  @brief Permet de modifier un titre d'un membre.
     *
     */
    void on_Bt_ModifierMembreTitre_clicked();

    /**
     *  @brief Permet de supprimer un titre d'un membre.
     *
     */
    void on_Bt_SupprimerMembreTitre_clicked();

    /**
     *  @brief Permet d'ajouter un type de membre.
     *
     */
    void on_Bt_AjouterMembreType_clicked();

    /**
     *  @brief Permet de modifier un type de membre.
     *
     */
    void on_Bt_ModifierMembreType_clicked();

    /**
     *  @brief Permet de supprimer un type d'un membre.
     *
     */
    void on_Bt_SupprimerMembreType_clicked();

    /**
     *  @brief Permet d'ajouter un type de jeu.
     *
     */
    void on_Bt_AjouterJeuxType_clicked();

    /**
     *  @brief Permet de modifier un type de jeu.
     *
     */
    void on_Bt_ModifierJeuxType_clicked();

    /**
     *  @brief Permet de supprimer un type de jeu.
     *
     */
    void on_Bt_SupprimerJeuxType_clicked();

    /**
     *  @brief Permet de définir le chemin des règles des jeux.
     *
     */
    void on_Bt_ParcourirRegle_clicked();

    /**
     *  @brief Permet de definir le chemin des images des jeux.
     *
     */
    void on_Bt_ParcourirImage_clicked();

    /**
     *  @brief Permet de déverrouiller les lines edits de la partie "Informations Ludo"
     *
     */
    void on_Bt_ModifierInfo_clicked();

    /**
     *  @brief Récupèration de la fonction pour l'affichage du style XX XX XX XX XX.
     *
     *  @param arg1
     */
    void on_LE_NumeroTel_textEdited(const QString &arg1);

    /**
     *  @brief Récupèration de la fonction pour l'affichage du style XX XX XX XX XX.
     *
     *  @param arg1
     */
    void on_LE_NumeroFax_textEdited(const QString &arg1);

    /**
     * @brief Test la nouvelle connection à la nouvelle BDD.
     *
     */
    void on_Bt_Connection_clicked();

    /**
     *  @brief Verifie si le nouveau code administrateur est correct.
     *
     */
    void on_Bt_ValiderCode_clicked();

    /**
     *  @brief Affiche le manuel d'utilisation du programme.
     *
     */
    void on_Bt_Aide_clicked();

private:
    // ATTRIBUTs ----------------------------------------------------------------
    ///< Pointeur de la classe graphique.
    Ui::F_Preferences *ui;

    ///< Pointeur qui contient l'adresse de la fenêtre graphique F_AjouterTitreType.
    F_AjouterTitreType * pTitreMembre;

    ///< Pointeur qui contient l'adresse de la fenêtre graphique F_AjouterTitreType.
    F_AjouterTitreType * pTypeMembre;

    ///< Pointeur qui contient l'adresse de la fenêtre graphique F_AjouterClassification.
    F_AjouterClassification * pTypeJeu;

    ///< Creer un modele du tableau pour les types des membres.
    QStandardItemModel * TbMembresType;

    ///< Creer un modele du tableau pour les titres des membres.
    QStandardItemModel * TbMembresTitre;

    ///< Creer un modele du tableau pour les types des jeux.
    QStandardItemModel * TbJeuxType;

    ///< Récupère la valeur du nom du type membre.
    QString sTypeMembre;

    ///< Récupère la valeur du titre membre.
    QString sTitreMembre;

    ///< Récupère la valeur du type jeux.
    QString sTypeJeux;

    // METHODEs -----------------------------------------------------------------
    /**
     *  @brief Le line edit qui récupère cette fonction se met en forme sous le type XX XX XX XX XX.
     *
     *  @param sNumero
     *  @return QString
     */
    QString BlocNumeroTelFax(QString sNumero);

    /**
     *  @brief Consulte la BDD et récupère les informations de celle-ci. Il sont ensuite mis dans les champs correspondant.
     *
     */
    void AfficherInfoDemarrage();

    /**
     *  @brief Fonction qui permet de mettre à jour le tableau contenant toutes les informations de la BDD.
     *
     */
    void MettreAJourBDD();
};

//------------------------------------------------------------------------------
#endif // F_PREFERENCES_H
//------------------------------------------------------------------------------
